package com.itlong.cloud.property.service;

import com.alibaba.fastjson.JSONObject;
import com.itlong.cloud.POJO.DTO.operate.ProjectSmartCommunityStatusChangeDTO;
import com.itlong.cloud.POJO.DTO.property.*;
import com.itlong.cloud.POJO.DTO.sdk.CloudFaceApiDTO;
import com.itlong.cloud.POJO.DTO.smartcard.SmartCardUserUpdateDTO;
import com.itlong.cloud.POJO.PO.AppUserInfoPO;
import com.itlong.cloud.POJO.PO.AppUserProjectPO;
import com.itlong.cloud.POJO.PO.AppUserRoomPO;
import com.itlong.cloud.POJO.PO.AppUserStayInHistoryPO;
import com.itlong.cloud.POJO.VO.jd.JDResultVO;
import com.itlong.cloud.POJO.VO.property.AppUserInfoGetVO;
import com.itlong.cloud.POJO.VO.property.CheckHouseHoldByRoomVO;
import com.itlong.cloud.POJO.VO.property.PropertyUserProofAuthInfoGetVO;
import com.itlong.cloud.POJO.VO.sdk.SDKFaceUserInfoGetVO;
import com.itlong.cloud.utils.page.Page;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      操作用户信息接口。
 * </desc>
 * @createDate 2017/09/18
 */
public interface IPropertyHouseHoldInfoService {

    /**
     * <desc>
     *      检测用户项目房间信息
     * </desc>
     *
     * @param phoneNum
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2020/03/18
     */
    Map<String,Object> checkUserInProject(String phoneNum,String projectId,String roomId);

    /**
     * <desc>
     *      获取地址下的楼栋信息
     * </desc>
     *
     * @param address
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2020/03/18
     */
    Map<String,Object> getRoomInfoByBuildNameAndUnitNameAndRoomNum(String address,String projectId);

    /**
     * <desc>
     *      根据id获取用户信息
     * <desc/>
     *
     * @param appUserGetOneDTO 获取单个App用户信息的数据传输对象
     * @return HouseHoldDetailsInfoDTO 物业住户信息详情页住户详情数据传输对象
     * @author zhangs
     * @createDate 2017/09/18
     */
    HouseHoldDetailsInfoDTO getUserById(AppUserGetOneDTO appUserGetOneDTO);

    /**
     * <desc>
     *      修改App用户信息时获取App用户信息
     * <desc/>
     * @RequestBody appUserGetOneDTO 获取单个App用户信息的数据传输对象
     * @return AppUserGetUserDetailsInfoDTO App用户信息更新时获取信息数据传输对象
     * @author zhangs
     * @createDate 2017/09/25
     */
    AppUserUpdateUserGetDTO updateUserGet(AppUserGetOneDTO appUserGetOneDTO);

    /**
     * <desc>
     *      根据实体类获取用户信息
     * <desc/>
     *
     * @param appUserInfoPO App用户信息实体对象
     * @return appUserInfoPO App用户信息实体对象
     * @author zhangs
     * @createDate 2017/09/18
     */
    AppUserInfoPO getOneUserByPO(AppUserInfoPO appUserInfoPO);

    /**
     * <desc>
     *      获取所有App用户信息
     * <desc/>
     *
     * @param checkAppUserDTO 查询App用户信息数据传输对象
     * @return Page<CheckAppUserInfoDTO> App用户房间信息分页集
     * @author zhangs
     * @createDate 2017/09/18
     */
    Page<AppUserInfoGetVO> getUserList(CheckAppUserDTO checkAppUserDTO) throws Exception;

    /**
     * <desc>
     *      住户权限分配查询App用户信息接口
     * <desc/>
     * @param checkAppUserDTO 查询App用户信息数据传输对象
     * @return Page<CheckAppUserInfoDTO> App用户房间信息分页集
     * @author Qiang.S
     * @createDate 2020/02/21
     */
    Page<AppUserInfoGetVO> getCheckUserListForHouseHold(CheckAppUserDTO checkAppUserDTO) throws Exception;

    /**
     * <desc>
     *      添加App用户信息前判断用户是否存在
     * <desc/>
     *
     * @param projectId  项目Id
     * @param phoneNum  App用户手机号
     * @return Integer
     * @author zhangs
     * @createDate 2017/09/26
     */
    Integer getUserByPhoneNum(String projectId, String phoneNum);

    /**
     * <desc>
     *      保存App用户信息
     * <desc/>
     *
     * @param appUserGetUserInfoDTO App用户信息数据传输对象
     * @param isSmartCommunity 是否开启云对讲
     * @param loginUserId 物业登录账号
     * @return
     * @author zhangs
     * @createDate 2017/09/18
     */
    void saveUser(AppUserGetUserInfoDTO appUserGetUserInfoDTO, Integer isSmartCommunity, String loginUserId) throws Exception;

    /**
     * <desc>
     *      保存用户以及相关关系信息(用户基础信息、用户房间信息和用户项目信息)
     * <desc/>
     *
     * @param appUserGetUserInfoDTO App用户信息数据传输对象
     * @param isSmartCommunity 是否开启云对讲
     * @return String
     * @author zhangs
     * @createDate 2018/02/25
     */
    String saveUserInfoAndRelationInfoToDB(AppUserGetUserInfoDTO appUserGetUserInfoDTO, Integer isSmartCommunity) throws Exception;

    /**
     * <desc>
     *      修改App用户信息接口
     * <desc/>
     *
     * @param appUserGetUserInfoDTO  App用户信息数据传输对象
     * @param loginUserId  物业登录账号
     * @param isSmartCommunity  是否使用云对讲： 0-否，1-是
     * @return List<String> 住户Id集
     * @author zhangs
     * @createDate 2017/09/26
     */
    List<String> updateAppUser(AppUserGetUserInfoDTO appUserGetUserInfoDTO, String loginUserId, Integer isSmartCommunity) throws Exception;

    /**
     * <desc>
     *      根据id删除用户
     * <desc/>
     *
     * @param userId App用户Id
     * @return Integer 影响的数据数量
     * @author zhangs
     * @createDate 2017/09/18
     */
    Integer delete(String userId) throws Exception;

    /**
     * <desc>
     *      根据id删除用户
     * <desc/>
     *
     * @param appUserUpdateUserRoomStatusDTO App用户房间状态信息数据传输对象
     * @param isSmartCommunity 是否使用云对讲： 0-否，1-是
     * @param authUserId 授权人Id
     * @param sceneType 推送场景类型(HouseHoldJPushSceneTypeEnum)
     * @return List<String> 住户Id集
     * @author zhangsO
     * @createDate 2017/09/18
     */
    List<String> userRemove(
            AppUserUpdateUserRoomStatusDTO appUserUpdateUserRoomStatusDTO,
            Integer isSmartCommunity,
            String authUserId,
            String sceneType) throws Exception;

    /**
     * <desc>
     *      更新App用户信息
     * <desc/>
     *
     * @param appUserInfoPO App用户信息实体对象
     * @return Integer 是否有影响到数据
     * @author zhangs
     * @createDate 2017/09/18
     */
    Integer updateUser(AppUserInfoPO appUserInfoPO) throws Exception;

    /**
     * <desc>
     *      冻结/解冻App用户状态接口
     * <desc/>
     *
     * @param appUserUpdateUserProjectStatusDTO 更新App用户项目状态数据传输对象
     * @return 被影响的数据数量
     * @author zhangs
     * @createDate 2017/09/29
     */
    Integer userProjectStatus(AppUserUpdateUserProjectStatusDTO appUserUpdateUserProjectStatusDTO) throws Exception;

    /**
     * <desc>
     *      删除用户房间关系(住户信息-未通过-删除)
     * <desc/>
     *
     * @param appUserDelUserRoomDTOS App用户房间信息数据传输对象集
     * @return Integer 被影响数据数量
     * @author zhangs
     * @createDate 2017/09/30
     */
    Integer delUserRoom(List<AppUserDelUserRoomDTO> appUserDelUserRoomDTOS, String projectId) throws Exception;

    /**
     * <desc>
     *      判断房间下是否已有业主
     * <desc/>
     *
     * @param appUserRoomOwnerIsExistDTO 房间中是否存在业主状态的数据传输对象
     * @return List<AppUserRoomPO> 住户房间信息
     * @author zhangs
     * @createDate 2017/10/10
     */
    List<AppUserRoomPO> getExistHouserByRoom(AppUserRoomOwnerIsExistDTO appUserRoomOwnerIsExistDTO);

    /**
     * <desc>
     *      获取与用户绑定的地址
     * <desc/>
     *
     * @param appUserGetNotContactRoomDTO 未与用户绑定的地址信息数据传输对象
     * @return List<AppUserGetContractRoomDTO> 用户房间信息集
     * @author zhangs
     * @createDate 2017/10/20
     */
    List<AppUserGetContractRoomDTO> getRoomContactHouser(AppUserGetNotContactRoomDTO appUserGetNotContactRoomDTO);

    /**
     * <desc>
     *      根据设备服务地址查询地址下住户现有权限地址
     * <desc/>
     *
     * @param params 楼栋列表或单元列表
     * @return List<UserDeviceAuthAddreddDTO> 住户现有权限地址集
     * @author zhangs
     * @createDate 2017/10/20
     */
    List<UserDeviceAuthAddreddDTO> getAuthAddrByDeviceAddr(Map<String, String> params) throws Exception;

    /**
     * <desc>
     *      根据地址查询住户
     * <desc/>
     *
     * @param params 楼栋列表或单元列表
     * @return
     * @author zhangs
     * @createDate 2017/10/20
     */
    List<Map<String, Object>> getUserByAddr(Map<String, List<String>> params) throws Exception;

    /**
     * <desc>
     *      地址变更更新App端用户的设备权限
     * <desc/>
     *
     * @param userIds 二级用户Id
     * @param authUserId 一级用户Id
     * @param projectId 项目Id
     * @return
     * @author zhangs
     * @createDate 2017/10/20
     */
    void updateAppUserAuth(List<String> userIds, String authUserId, String projectId) throws Exception;

    /**
     * <desc>
     *      临时授权推送平板用户信息
     * </desc>
     *
     * @param projectId
     * @param userId
     * @author Jiaqi.X
     * @createDate 2019/03/25
     */
    void pushPadUserInfos(String projectId,String userId,String doorAuth,String elevatorAuth,String talkAuth) throws Exception;

    /**
     * <desc>
     *      推送用户临时权限至设备
     * </desc>
     *
     * @param projectId
     * @param userId
     * @param type 为1只推送云电梯指令  为2则只推送云门禁指令 为3则推送云电梯和云门禁指令
     * @author Jiaqi.X
     * @createDate 2019/03/25
     */
    void pushTempUserInfos(String projectId,String userId,String doorAuth,String elevatorAuth,String talkAuth,String type) throws Exception;

    /**
     * <desc>
     *      查询住户的手机号
     * <desc/>
     *
     * @param userId 住户ID
     * @return
     * @author zhangs
     * @createDate 2017/10/20
     */
    String getUserPhone(String userId);

    /**
     * <desc>
     *      获取与用户绑定的楼栋下房间地址数量
     * <desc/>
     *
     * @param userId 住户Id
     * @param projectId 项目Id
     * @return Map<String, Integer> 楼栋Id与其对应住户房间数量的Map集，
     *      Map<buildId, roomCount>:楼栋Id，楼栋下住户绑定的房间数量
     * @author zhangs
     * @createDate 2017/11/10
     */
    Map<String,Integer> getBuildNotContactHouse(String userId, String projectId);

    /**
     * <desc>
     *      获取与用户绑定的单元下房间地址数量
     * <desc/>
     *
     * @param userId 住户Id
     * @param projectId 项目Id
     * @param buildId 楼栋Id
     * @return Map<String, Integer> 单元Id与其对应住户房间数量的Map集，
     *      Map<unitId, roomCount>:单元Id，单元下住户绑定的房间数量
     * @author zhangs
     * @createDate 2017/11/10
     */
    Map<String,Integer> getUnitNotContactHouse(String userId, String projectId, String buildId);


    /**
     * <desc>
     *      根据房间id查询住户列表
     * <desc/>
     *
     * @param roomId 房间id
     * @return Key值(userId,userName,qqNum,sipAccount,isAllowApp,isOnline,projectId)
     * @author Chunjian.G
     * @createDate 2017-11-16
     */
    List<Map<String, Object>> getUserByRoomId(String roomId) throws Exception;

    /**
     * <desc>
     *      根据住户项目关系PO查询住户项目关系PO
     * <desc/>
     *
     * @param appUserProjectPO 住户项目关系PO
     * @return AppUserProjectPO 住户项目关系PO
     * @author zhangs
     * @createDate 2017-11-16
     */
    AppUserProjectPO getUserProject(AppUserProjectPO appUserProjectPO) throws Exception;


    /**
     * <desc>
     *      房屋管理-房屋详情-入住迁出记录
     * <desc/>
     *
     * @param checkHouseHoldByRoomDTO 房屋详情中查询入住迁出记录条件数据传输对象
     * @return List<CheckHouseHoldByRoomVO> 房屋详情中查询入住迁出记录数据信息
     * @author zhangs
     * @createDate 2017/11/23
     */
    List<CheckHouseHoldByRoomVO> moveInAndOutRecord(CheckHouseHoldByRoomDTO checkHouseHoldByRoomDTO) throws Exception;

    /**
     * <desc>
     *      获取小区中所有住户项目信息
     * </desc>
     * @param projectId 项目Id
     * @return @return Integer 住户数量
     * @author zhangs
     * @createDate 2017/11/25
     */
    Integer getAllHouseProjectInfo(String projectId) throws Exception;

    /**
     * <desc>
     *      获取住户最新地址
     * </desc>
     * @param projectId 项目Id
     * @param userIds 住户Id集
     * @return List<AppUserProjectPO> 住户项目信息集
     * @author zhangs
     * @createDate 2017/11/25
     */
    List<AppUserRoomPO> getHouseHoldRoom(String projectId, List<String> userIds) throws Exception;

    /**
     * <desc>
     *      项目云对讲由无到有，由禁用到启用需生成住户项目信息中的SIP信息
     * </desc>
     *
     * @param projectSmartCommunityStatusChangeDTO 项目云对讲启用状态变化DTO
     * @return void
     * @author zhangs
     * @createDate 2017/11/25
     */
    void updateUserProjectSip(ProjectSmartCommunityStatusChangeDTO projectSmartCommunityStatusChangeDTO) throws Exception;

    /**
     * <desc>
     *      获取住户所在楼栋Id并以逗号拼接
     * <desc/>
     *
     * @param userId App用户Id
     * @param  projectId  项目Id
     * @return 住户所在楼栋Id并以逗号拼接
     * @author zhangs
     * @createDate 2017/11/23
     */
    String getBuildIdsByHouseHold(String userId, String projectId) throws Exception;

    /**
     * <desc>
     *      获取住户所在楼栋Id并以逗号拼接
     * <desc/>
     *
     * @param userId App用户Id
     * @param  projectId  项目Id
     * @return 住户所在楼栋
     * @author zhangs
     * @createDate 2017/11/23
     */
    List<Map<String,Object>> getUserBuilds(String userId, String projectId) throws Exception;

    /**
     * <desc>
     *      获取房间中正常状态住户的数量
     * <desc/>
     *
     * @param roomId 房间Id
     * @param  projectId  项目Id
     * @return 房间中正常状态住户的数量
     * @author zhangs
     * @createDate 2017/12/04
     */
    Integer getMoveInHouseHoldCount(String roomId, String projectId) throws Exception;

    /**
     * <desc>
     *      获取房间中正常状态住户的数量
     * <desc/>
     *
     * @param roomId 房间Id
     * @param  projectId  项目Id
     * @return 房间中正常状态住户的数量
     * @author zhangs
     * @createDate 2017/12/04
     */
    Integer getUserMoveInHouseHoldCount(String roomId, String projectId, String userId) throws Exception;

    /**
     * <desc>
     *      查询一卡通用户信息接口(一卡通用户+查询按钮)
     * <desc/>
     *
     * @param checkSmartCardUserDTO 查询App用户信息传输数据
     * @return Page<AppUserInfoGetVO> 用户房间信息分页集
     * @author zhangs
     * @createDate 2017/12/08
     */
    Page<AppUserInfoGetVO> getCheckSmartCardUserList(CheckSmartCardUserDTO checkSmartCardUserDTO) throws Exception;

    /**
     * <desc>
     *      修改一卡通用户信息
     * <desc/>
     *
     * @param  smartCardUserUpdateDTO 物业后台更新一卡通用户信息数据传输对象
     * @param  isSmartCommunity 是否开启云对讲
     * @return MessageVO 标准格式化响应结果
     * @author zhangs
     * @createDate 2017/12/08
     */
    void updateSmartCardUser(SmartCardUserUpdateDTO smartCardUserUpdateDTO, Integer isSmartCommunity) throws Exception;

    /**
     * <desc>
     *      审核用户接口
     * <desc/>
     *
     * @param examineHouseHoldDTO 审核住户数据传输对象
     * @param isSmartCommunity 是否使用云对讲： 0-否，1-是
     * @param projectId 项目Id
     * @param authUserId 授权人Id
     * @param sceneType 推送场景类型(HouseHoldJPushSceneTypeEnum)
     * @return
     * @author zhangs
     * @createDate 2017/09/21
     */
    void examineUser(
            ExamineHouseHoldDTO examineHouseHoldDTO,
            Integer isSmartCommunity,
            String projectId,
            String authUserId,
            String sceneType) throws Exception;

    /**
     * <desc>
     *      获取住户项目数据状态(status)正常下住户项目状态(userProjectStatus)
     * <desc/>
     *
     * @param  projectId 项目Id
     * @param  userId 用户Id
     * @return Integer
     * @author zhangs
     * @createDate 2017/12/21
     */
    Integer getUserProjectStatusAtNormal(String projectId, String userId) throws Exception;

    /**
     * <desc>
     *      查询项目下的用户是否存在
     * <desc/>
     *
     * @param  projectId 项目Id
     * @param  userId 用户Id
     * @return Integer
     * @author Juguang.S
     * @createDate 2021/06/18
     */
    Integer getUserIsExist(String projectId, String userId) throws Exception;

    /**
     * <desc>
     *      存储住户的入住历史(迁入/迁出)
     * <desc/>
     *
     * @param  appUserStayInHistoryPOS 住户迁入迁出历史记录实体类集
     * @return
     * @author zhangs
     * @createDate 2017/12/25
     */
    void saveUserStayInHistory(List<AppUserStayInHistoryPO> appUserStayInHistoryPOS);

    /**
     * <desc>
     *      对sip数据源中的Sip账号进行添加，更新，或删除操作
     * <desc/>
     * @param  addOrUpdateUserName  根据userName添加或更新Sip数据源的数据（存在则更新，不存在则添加）
     * @param  addOrUpdatePassword  添加或更新Sip数据源的password
     * @param  delUserName  根据userName删除Sip数据源的数据
     * @author Biao.R
     * @createDate 2018/1/9
     */
    void cloudSipHandler(String projectId,String addOrUpdateUserName, String addOrUpdatePassword, String delUserName) throws Exception;

    /**
     * <desc>
     *      临时提供一个通过手机号码查询APP用户id接口
     * </desc>
     *
     * @param phoneNum
     * @return
     * @author wangzhi
     * @createDate 2018-04-18
     */
    String getAppUserIdTemporary(String phoneNum)throws Exception;

    /**
     * <desc>
     *      更新人脸注册信息
     * <desc/>
     *
     * @param  appUserProjectPO 人脸注册信息
     * @return Integer
     * @author Qiang.S
     * @createDate 2018/05/18
     */
    Integer updatePreUserBaiduFaceInfo(AppUserProjectPO appUserProjectPO) throws Exception;

    /**
     * <desc>
     *     查询此身份证是否已被绑定
     * </desc>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @param idcardKey 身份证序号
     * @return
     * @author Qiang.S
     * @createDate 2018-08-22
     */
    Integer getIDCardByUserId(String userId, String projectId, String idcardKey) throws Exception;

    /**
     * <desc>
     *     绑定身份证
     * </desc>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @param idcardKey 身份证序号
     * @param idCard 身份证号
     * @param mark 绑定身份证推送指令是否需要延迟  更换身份证需要先推送解绑再推绑定
     * @return
     * @author Qiang.S
     * @createDate 2018-08-22
     */
    Integer bindingIDCard(String userId, String projectId, String idcardKey,String idCard,String idCardStatus,boolean mark) throws Exception;

    /**
     * <desc>
     *     解绑身份证
     * </desc>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @return
     * @author Qiang.S
     * @createDate 2018-08-22
     */
    Integer untieIDCard(String userId, String projectId) throws Exception;

    /**
     * <desc>
     *     身份证挂失信息更新
     * </desc>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @param isLoss 挂失状态:0 正常,1 挂失
     * @return
     * @author Qiang.S
     * @createDate 2019-02-20
     */
    Integer updateIsLossInfo(String userId, String projectId, String isLoss) throws Exception;

    /**
     * <desc>
     *      获取房间类型
     * <desc/>
     *
     * @param roomId 房间Id
     * @param  projectId  项目Id
     * @return 房间类型
     * @author Juguang.S
     * @createDate 2019/08/14
     */
    Integer getHousesType(String roomId,String projectId) throws Exception;

    /**
     * <desc>
     *      修改用户信息
     * <desc/>
     *
     * @param dto
     * @return 房间类型
     * @author Qiang.S
     * @createDate 2019/11/05
     */
    Integer updateUserInfo(CloudFaceApiDTO dto) throws Exception;

    /**
     * <desc>
     *      查询用户列表
     * <desc/>
     *
     * @param dto
     * @return 用户信息
     * @author Qiang.S
     * @createDate 2019/11/06
     */
    Page<SDKFaceUserInfoGetVO> getUserInfoForApi(CloudFaceApiDTO dto) throws Exception;

    /**
     * <desc>
     *      获取旧用户临时权限信息
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/09/25
     */
    Map<String,Object> getOldUserTempAuth(String userId,String projectId);

    /**
     * <desc>
     *      获取修改前的用户名称及标签
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Juguang.S
     * @createDate 2020/05/20
     */
    Map<String,Object> getOldUserInfo(String userId,String projectId);


    /**
     * <desc>
     *      根据用户id查询用户房间信息用于平板增量数据推送
     * </desc>
     *
     * @param userIds
     * @param projectId
     * @return
     * @author jiaqi.X
     * @createDate 2019/03/20
     */
    List<Map<String,Object>> getUserRoomIdsByUserIdAndProjectId( String[] userIds,
                                                                String projectId);

    /**
     * <desc>
     *     京东非标-人脸注册-业主
     * </desc>
     *
     * @param params
     * @return
     * @author pengwei
     * @createDate 2020/12/08
     */
    String jdUserFaceReg(JSONObject params) throws Exception;

    /**
     * <desc>
     *     京东非标-人脸注册-业主物理删除
     * </desc>
     *
     * @param params
     * @return
     * @author pengwei
     * @createDate 2020/12/16
     */
    void jdUserRealDel(@RequestBody JSONObject params)throws Exception;


    /**
     * <desc>
     *     京东非标-人脸注册-访客
     * </desc>
     *
     * @param params
     * @return
     * @author pengwei
     * @createDate 2020/12/09
     */
    String jdVisitorFaceReg(JSONObject params) throws Exception;

    /**
     * <desc>
     *     京东非标-访客内部更新，不做对外接口
     * </desc>
     *
     * @param params
     * @return
     * @author pengwei
     * @createDate 2020/12/09
     */
    Integer jdVisitorUpdate(@RequestBody JSONObject params)throws Exception;

    /**
     * <desc>
     *     京东非标-用户修改
     * </desc>
     *
     * @param params
     * @return
     * @author pengwei
     * @createDate 2020/12/10
     */
    JDResultVO jdUserUpdate(@RequestBody JSONObject params)throws Exception;

    /**
     * <desc>
     *     京东非标-用户逻辑删除
     * </desc>
     *
     * @param params
     * @return
     * @author pengwei
     * @createDate 2020/12/10
     */
    JDResultVO jdUserDelete(@RequestBody JSONObject params)throws Exception;

    /**
     * <desc>
     *     京东非标-乘梯权限变更
     * </desc>
     *
     * @param params
     * @return
     * @author pengwei
     * @createDate 2020/12/10
     */
    JDResultVO jdAuthAlter(@RequestBody JSONObject params)throws Exception;

    /**
     * <desc>
     *     京东非标-电梯及楼层信息获取
     * </desc>
     *
     * @param params
     * @return
     * @author pengwei
     * @createDate 2020/12/11
     */
    JDResultVO getAllElevatorInfo(@RequestBody JSONObject params)throws Exception;

    /**
     * <desc>
     *      获取人员类型id
     * </desc>
     *
     * @param userTypeName 人员类型名称
     * @param projectId 项目id
     * @return 人员类型id
     * @Author Zhu.yj
     * @createDate  2021/4/9
     */
    Integer getUserTypeIdByName(String userTypeName, String projectId) throws Exception;


    /**
     * <desc>
     *      获取用户有关人脸和身份证相关信息
     * </desc>
     *
     * @param userId 用户id
     * @param projectId 项目id
     * @return
     * @Author Juguang.S
     * @createDate  2021/4/20
     */
    PropertyUserProofAuthInfoGetVO getUserFaceAndIdCardInfo(String userId, String projectId) throws Exception;
    /**
     * <desc>
     *      根据房间id获取房间号
     * </desc>
     *
     * @param roomId 房间id
     * @return
     * @Author Zhu.yj
     * @createDate  2021/4/20
     */
    String getRoomNum(String roomId) throws Exception;

    /**
     * <desc>
     *      删除用户分组及分组中设备权限
     * </desc>
     *
     * @param projectId 项目id
     * @param userId 用户id
     * @return
     * @Author Zhu.yj
     * @createDate  2021/4/22
     */
    Integer deleteUserGroupAuth(String projectId, String userId) throws Exception;

    /**
     * <desc>
     *      删除审核未通过的用户
     * </desc>
     *
     * @return
     * @Author Zhu.yj
     * @createDate  2021/4/28
     */
    Integer removeUnPassedUser(List<AppUnCheckUserRemoveDTO> userRemoveDTOS, String projectId) throws Exception;

    /**
     * <desc>
     *      获取用户列表时的附加字段
     * </desc>
     *
     * @param
     * @return
     * @Author Zhu.yj
     * @createDate  2021/4/29
     */
    Map<String, Object> getAppendInfo(CheckAppUserDTO checkAppUserDTO) throws Exception;

    /**
     * <desc>
     *      获取用户旧的角色组id（分组id）
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @Author Zhu.yj
     * @createDate  2021/5/16
     */
    List<String> getOldRoleGroupId(String userId, String projectId) throws Exception;

    /**
     * <desc>
     *      根据用房和项目编号查询是否注册了人脸
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @Author Juguang.S
     * @createDate  2021/06/11
     */
    Integer isFaceUrlByUserIdAndProjectId (String userId, String projectId) throws Exception;

    /**
     * <desc>
     *      获取楼栋、单元及房间相关ID
     * <desc/>
     *
     * @param  roomDTO 项目Id
     * @return 楼栋、单元及房间相关ID
     * @Author Juguang.S
     * @createDate 2021/06/15
     */
    AppUserRoomDTO getRoomInfo(AppUserRoomDTO roomDTO) throws Exception;
}
